


#include "bsp.h"

static const char *datakey = "datakey";

static const char *TAG = "bsp";
/*******************************************************************************
* 功能描述	: 保存全局变量数据
* 参数一    : 无
* 返回参数  : 保存成功==0，保存失败==x
********************************************************************************
*修改日期             修改人          修改备注
*20211111            umi             初始版本
*******************************************************************************/
u8 Tospo_DataBase_Save(void)
{
    esp_err_t ret = ESP_OK;
    u16 	wCheckSum = 0x00;
	u8*		pPoint;
	//u8*		pPoint_Ram;
	u16		i;
	//u8 		cRet = FALSE;

    pPoint = (u8 *)&App;
    pPoint += 2;
    for(i = 0x00;i < sizeof(App)-2;i++)
    {
        wCheckSum += *(pPoint++);
    }
    App.wCheckSum = wCheckSum;
    
    ret=esp_storage_set(datakey,&App,sizeof(App));
    ESP_LOGI(TAG, "DataBase_Save=ret==%d",ret);
    return ret;
}

/*******************************************************************************
* 功能描述	: 读取全局变量数据
* 参数一    : 无
* 返回参数  : 读取成功==0，读取失败==x
********************************************************************************
*修改日期             修改人          修改备注
*20211111            umi             初始版本
*******************************************************************************/
u8 Tospo_DataBase_Read(void)
{
    esp_err_t ret = ESP_OK;
    ret=esp_storage_get(datakey,&App,sizeof(App));
    ESP_LOGI(TAG, "Read=ret==%d",ret);
    return ret;
} 



/*******************************************************************************
* 功能描述	: 初始化数据结构,进行了两次数据存储和校验，如果数据存储一的数据不正确则进行数据存储二的数据校验。两次都不正确则取第一次的
* 参数一    : 是否强制初始化
* 返回参数  : 是否初始化成功：成功==1，失败==0
********************************************************************************
*修改日期             修改人          修改备注
*20211111            umi             初始版本
*******************************************************************************/
u8 Tospo_InitDatabase(u8 bForceUpgrade)
{
    u16 	wCheckSum = 0x00;
	u8*		pPoint;
	//u8*		pPoint_Ram;
	u16		i,temp;
	//u8 		cRet = FALSE;
	u8 		bCheckSumErr = FALSE;
	//u8		bLoadDefaultSettings = FALSE;
	//u8		ReadCheckSumCounts = 0;
	//u8 		uiKey = UIKEY_NONE;
	//u32  Value_tmp;
	temp = sizeof(App);


    Tospo_DataBase_Read();//读取保存的数据

    pPoint = (u8 *)&App;
    pPoint += 2;//前两个字节是校验和
    for(i = 0x00;i < temp-2;i++)//校验和累加
    {
        wCheckSum += *pPoint++;
    }

    if(App.wCheckSum != wCheckSum)//校验和错误
    {
        bCheckSumErr = TRUE;
        ESP_LOGI(TAG, "bCheckSumErr==%d",bCheckSumErr);
    }

    //校验错误或强制更新的默认设置值
	if((bForceUpgrade == TRUE) || bCheckSumErr)
	{
		//初始化一些全局变量参数
        App.Tosop_Edu_Channel=0x88;
        App.Tosop_Edu_column=0x01;
        App.Tosop_Edu_Row=0x01;

        App.Tospo_Send_count=0;
        App.Tospo_Recv_count=0;

		App.Tosop_Is_CONNECT_FLAG=0;

        App.Tospo_Edu_Rssi = -50;
 
        Tospo_DataBase_Save();
	}

    ESP_LOGI(TAG, "App.Tosop_Edu_Channel==%d",App.Tosop_Edu_Channel);
    ESP_LOGI(TAG, "App.Tosop_Edu_column==%d",App.Tosop_Edu_column);
    ESP_LOGI(TAG, "App.Tosop_Edu_Row==%d",App.Tosop_Edu_Row);


    return 1;

}


/*******************************************************************************
* 功能描述	: 各种驱动外设初始化
* 参数一    : 无
* 返回参数  : 无
********************************************************************************
*修改日期             修改人          修改备注
*20211111            umi             初始版本
*******************************************************************************/
void Tospo_bsp_init(void)
{

    Tospo_InitDatabase(0);

    bsp_button_init();
    //bsp_light_init();

    bsp_ssd1306_init();

} 
